home *** CD-ROM | disk | FTP | other *** search
/ Celestin Apprentice 2 / Apprentice-Release2.iso / Source Code / C / Snippets / EMBL Search / Sources / menus.c < prev    next >
Encoding:
C/C++ Source or Header  |  1992-05-04  |  4.7 KB  |  191 lines  |  [TEXT/MSWD]

  1. /*
  2. *********************************************************************
  3. *    
  4. *    Menus.c
  5. *    Menu bar handling
  6. *        
  7. *    Rainer Fuchs
  8. *    EMBL Data Library
  9. *    Postfach 10.2209
  10. *    D-6900 Heidelberg, FRG
  11. *    E-mail: fuchs@embl-heidelberg.de
  12. *
  13. *    Copyright © 1992 EMBL Data Library
  14. *        
  15. **********************************************************************
  16. *    
  17. */ 
  18.  
  19. #include "EMBL-Search.h"
  20. #include "EMBL-Search.rsrc.h"
  21.  
  22. /*
  23. ******************************* Prototypes ***************************
  24. */
  25.  
  26. #include "menus.h"
  27. #include "pstr.h"
  28. #include "util.h"
  29. #include "window.h"
  30.  
  31.  
  32. /*
  33. ********************************* Global variables *******************
  34. */
  35.  
  36. extern VolInfo        gCurrentCD;                    /* information about current CD            */
  37. extern MenuHandle    gMenu[MENUNR];                /* menu handles                                */
  38. extern Prefs        gPrefs;
  39. extern DBInfo        gDBInfo[DB_NUM];
  40.  
  41. /**************************************
  42. *    Adjust Other menu item in Creators submenu to show the name of the
  43. *    creator application.
  44. *    Return value:    none
  45. */
  46.  
  47. void UpdateOtherCreator()
  48. {
  49.     Str255    title;
  50.     
  51.     GetIndString(title,OTHERS,OTHERCREATOR);
  52.     pstrcat(title,"\p (");
  53.     pstrcat(title,gPrefs.creatorName);
  54.     pstrcat(title,"\p)…");
  55.     
  56.     SetItem(gMenu[CREATOR],OTHERS_I,title);
  57. }
  58.  
  59. /**************************************
  60. *    Adjust menu bar
  61. *    Return value:    none
  62. */
  63.  
  64. void MaintainMenus()
  65. {
  66.     register short    i,n;
  67.     WindowPtr        topWindow=FrontWindow();
  68.     WDPtr                wdp;
  69.     Str255            title,str;
  70.     
  71.     /* Default status */
  72.     
  73.     EnableItem(gMenu[FILE],NEW_I);
  74.     EnableItem(gMenu[FILE],OPEN_I);
  75.     EnableItem(gMenu[FILE],LOAD_I);
  76.     EnableItem(gMenu[FILE],CLOSE_I);
  77.     DisableItem(gMenu[FILE],SAVE_I);
  78.     DisableItem(gMenu[FILE],SAVEAS_I);
  79.     DisableItem(gMenu[FILE],EXPORTSEL_I);
  80.     EnableItem(gMenu[FILE],PAGESETUP_I);
  81.     EnableItem(gMenu[FILE],PRINT_I);
  82.     EnableItem(gMenu[FILE],QUIT_I);
  83.     
  84.     for(i=UNDO_I;i <= DUPLICATE_I;DisableItem(gMenu[EDIT],i++));
  85.  
  86.     EnableItem(gMenu[OSTUFF],INFO_I);
  87.     DisableItem(gMenu[OSTUFF],XREF_I);
  88.     
  89.     for(i=FORMAT_I;i<=GENERAL_I;EnableItem(gMenu[PREFS],i++));
  90.     EnableItem(gMenu[PREFS],SAVEPREFS_I);
  91.     DisableItem(gMenu[WINDOWS],ROTATE_I);
  92.     
  93.     if(IsDAWindow(topWindow)) {
  94.         DisableItem(gMenu[FILE],NEW_I);
  95.         DisableItem(gMenu[FILE],OPEN_I);
  96.         DisableItem(gMenu[FILE],LOAD_I);
  97.         DisableItem(gMenu[FILE],CLOSE_I);
  98.         DisableItem(gMenu[FILE],PAGESETUP_I);
  99.         DisableItem(gMenu[FILE],PRINT_I);
  100.         DisableItem(gMenu[FILE],QUIT_I);
  101.         
  102.         EnableItem(gMenu[EDIT],UNDO_I);
  103.         for(i=CUT_I;i <= CLEAR_I;EnableItem(gMenu[EDIT],i++));
  104.         for(i=FORMAT_I;i<= SAVEPREFS_I;DisableItem(gMenu[PREFS],i++));
  105.     }
  106.     else {
  107.         /*
  108.         *    Window-independent menu options
  109.         */
  110.  
  111.         if(*(gCurrentCD.volName) == EOS) {
  112.             DisableItem(gMenu[OSTUFF],INFO_I);
  113.         }
  114.         
  115.         if(GetFreeWindow() == -1) {
  116.             DisableItem(gMenu[FILE],OPEN_I);
  117.             DisableItem(gMenu[FILE],LOAD_I);
  118.             DisableItem(gMenu[FILE],NEW_I);
  119.         }
  120.         
  121.         /*
  122.         *    Window-dependent menu options
  123.         */
  124.         if( topWindow == NULL ) {        /* no windows open */
  125.             EnableItem(gMenu[FILE],        OPEN_I);
  126.             DisableItem(gMenu[FILE],    CLOSE_I);
  127.             DisableItem(gMenu[FILE],    PRINT_I);
  128.         }
  129.         else {
  130.             EnableItem(gMenu[WINDOWS], ROTATE_I);                    
  131.             n=CountMItems(gMenu[WINDOWS]);
  132.             GetWTitle(topWindow,title);
  133.             for(i=FIRSTWIN_I;i <= n;++i) {
  134.                 CheckItem(gMenu[WINDOWS],i,FALSE);
  135.                 GetItem(gMenu[WINDOWS],i,str);
  136.                 if(!pstrcmp(str,title))
  137.                     CheckItem(gMenu[WINDOWS],i,TRUE);
  138.             }
  139.  
  140.  
  141.             wdp = FindMyWindow(topWindow);
  142.             if(wdp) {
  143.                 if(wdp->dirty)
  144.                     EnableItem(gMenu[FILE],    SAVE_I);
  145.                 EnableItem(gMenu[FILE],    SAVEAS_I);
  146.                 
  147.                 /*
  148.                 *    Window kind dependent options
  149.                 */
  150.                 switch( ((WindowPeek)wdp)->windowKind) {
  151.                     case queryW:
  152.                         EnableItem(gMenu[EDIT], CUT_I);
  153.                         EnableItem(gMenu[EDIT], COPY_I);
  154.                         EnableItem(gMenu[EDIT], PASTE_I);
  155.                         EnableItem(gMenu[EDIT], CLEAR_I);
  156.                         EnableItem(gMenu[EDIT], DUPLICATE_I);
  157.                         DisableItem(gMenu[FILE],    PRINT_I);
  158.                         break;
  159.                     case seqW:
  160.                         if( (**(SeqRecHdl)(wdp->userHandle)).firstSel >= 0) {
  161.                             EnableItem(gMenu[EDIT], COPY_I);
  162.                             EnableItem(gMenu[EDIT], SELNONE_I);
  163.                             if( (**(SeqRecHdl)(wdp->userHandle)).firstSel > 0 ||
  164.                                  (**(SeqRecHdl)(wdp->userHandle)).lastSel <
  165.                                           (**(SeqRecHdl)(wdp->userHandle)).nlines -1 )
  166.                                  EnableItem(gMenu[EDIT], SELALL_I);
  167.                          }
  168.                         else 
  169.                             EnableItem(gMenu[EDIT],SELALL_I);
  170.                         
  171.                         if ((**(SeqRecHdl)(wdp->userHandle)).xrefHdl != NULL &&
  172.                                 GetFreeWindow() != -1 )
  173.                             EnableItem(gMenu[OSTUFF],XREF_I);
  174.                         break;    
  175.                     case resW:
  176.                         if( (**(ResultHdl)(wdp->userHandle)).nsel > 0 ) {
  177.                             EnableItem(gMenu[FILE], EXPORTSEL_I);
  178.                             EnableItem(gMenu[EDIT], COPY_I);
  179.                             EnableItem(gMenu[EDIT], SELNONE_I);
  180.                             if( (**(ResultHdl)(wdp->userHandle)).nsel != 
  181.                                 (**(ResultHdl)(wdp->userHandle)).nhits )
  182.                                 EnableItem(gMenu[EDIT], SELALL_I);
  183.                         }
  184.                         else
  185.                             EnableItem(gMenu[EDIT],SELALL_I);
  186.                         break;
  187.                 }        
  188.             }
  189.         }
  190.     }
  191. }